IF EXISTS(SELECT * FROM sysobjects WHERE name = 'validarInterseccionMuestraCanal' AND type = 'P')
BEGIN
	DROP PROCEDURE validarInterseccionMuestraCanal
END
GO
CREATE PROCEDURE validarInterseccionMuestraCanal
(
@CodigoCanal 		INT,
@CodigoMuestraCanal 	VARCHAR(12),
@Desde	FLOAT,
@Hasta	FLOAT,
@CodigoTipoControlCalidad INT,
@Result	INT OUT
)
AS
/*********************************************************************
	Resumen: Devuelve lista de MuestraCanal, -- SE Valida solo Tipo COMUN
	Parametros:
		@CodigoCanal : Codigo de Sondaje
		@Desde : Valor inicial a validar
		@Hasta : Valor final a validar
		@Result : Resultado 1 = Error, 0 = Exito
**********************************************************************/	
SET NOCOUNT on
BEGIN 

	SET @Result = 0
	IF (@CodigoTipoControlCalidad <> 1)
	BEGIN
		GOTO Terminar
	END 
	
	DECLARE @MuestraCanal TABLE
	(
	CodigoMuestraCanal VARCHAR(12),
	Desde FLOAT,
	Hasta FLOAT
	)
	
	INSERT INTO @MuestraCanal(CodigoMuestraCanal, Desde, Hasta)
	SELECT CodigoMuestraCanal, Desde, Hasta FROM MuestraCanal t1 
	WITH(NOLOCK) WHERE t1.CodigoCanal = @CodigoCanal AND t1.CodigoTipoControlCalidad = 1 --SOLO COMUNES
	
	IF (@CodigoMuestraCanal = '0')
		BEGIN	   
			IF (@Hasta > 0)
				BEGIN	   
					DECLARE @Serie VARCHAR(50)
					SET @Serie = 'C';
					
					SELECT @Serie = rtrim(ltrim(DescripcionCorta)) FROM SerieMuestra WHERE CodigoSerieMuestra = 3 -- Muestra Canal
					SELECT @CodigoMuestraCanal = LEFT(LTRIM(STR(CONVERT(INT, ISNULL(substring(MAX(t1.CodigoMuestraCanal), 1, 7), 0)) + 1 + 10000000)), 7) + @Serie
					FROM MuestraCanal t1 WITH(NOLOCK) 
					WHERE t1.CodigoCanal = @CodigoCanal AND t1.CodigoTipoControlCalidad = 1 --SOLO COMUNES
					INSERT INTO @MuestraCanal(CodigoMuestraCanal, Desde, Hasta)
					VALUES (@CodigoMuestraCanal, @Desde, @Hasta)
				END
		END
	ELSE
		BEGIN
			UPDATE @MuestraCanal SET Desde = @Desde, Hasta = @Hasta WHERE CodigoMuestraCanal = @CodigoMuestraCanal
		END	  
		
	DECLARE @MuestraCanal1 TABLE
	(
	Orden INT IDENTITY,
	CodigoMuestraCanal VARCHAR(12),
	Desde FLOAT,
	Hasta FLOAT
	)
		   
	INSERT INTO @MuestraCanal1(CodigoMuestraCanal, Desde, Hasta)			
	SELECT CodigoMuestraCanal, Desde, Hasta FROM @MuestraCanal ORDER BY Desde ASC, Hasta ASC    
   
	DECLARE @CodigoAnterior	VARCHAR(12)
	DECLARE @Espacio FLOAT
	DECLARE @EspacioAnterior FLOAT
	
	SELECT TOP 1 @CodigoAnterior = t1.CodigoMuestraCanal, @EspacioAnterior = isnull(Desde, 0) 
	FROM @MuestraCanal1 t1 ORDER BY Orden ASC
	
	-- Valida Interseccion de segmetos
	DECLARE curMuestraCanal CURSOR FOR
	SELECT Orden, CodigoMuestraCanal, isnull(Desde, 0) AS Espacio FROM @MuestraCanal1
	UNION 
	SELECT Orden, CodigoMuestraCanal, isnull(Hasta, 0) AS Espacio FROM @MuestraCanal1
	ORDER BY 1
	
	DECLARE @Orden INT

	
	OPEN curMuestraCanal
	FETCH NEXT FROM curMuestraCanal INTO @Orden, @CodigoMuestraCanal, @Espacio								
	WHILE (@@FETCH_STATUS=0)
	BEGIN
		   	
		IF (@CodigoAnterior <> @CodigoMuestraCanal)
			BEGIN
				IF (@Espacio - @EspacioAnterior) <> 0
					BEGIN
						-- Se marca como inconstencia a ambos registros
				   		SET @Result = 1
						CLOSE curMuestraCanal
						DEALLOCATE curMuestraCanal	 
						GOTO Terminar		   		
					END							
			END 
		
		SET @CodigoAnterior = @CodigoMuestraCanal 
		SET @EspacioAnterior = @Espacio
		FETCH NEXT FROM curMuestraCanal INTO @Orden, @CodigoMuestraCanal, @Espacio
	END
	CLOSE curMuestraCanal
	DEALLOCATE curMuestraCanal
	  
Terminar:
	PRINT str(@Result)
	SELECT @Result AS Result
	
END -- validarInterseccionMuestraCanal 4, 1, 12, 34, 1, 0 		
